/*
 * Classe Operator
 * C'est l'élément de base pour la programmation du robot.
 */
package chipwits.operator;

import chipwits.dnd.DnDTransferHandler;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import javax.swing.JLabel;

/**
 *
 * @author Emmanuel
 */
public abstract class Operator extends JLabel implements DragGestureListener, DragSourceListener {   //on peut remplacer JLabel par JComponent, ou n'importe qu'elle classe qui en hérite.

    public final static int ICON_HEIGHT = 68; //pas oublier modifier taille dans mainFrame (preferedsize des label) si on change ca.
    public final static int ICON_WIDTH = 36;
    public final static int LIMITE_1_2_FLECHES = 9;    //un peu foireux comme système...


    DragSource dragSource;
    public OpType type;      //type de l'opérateur

    public Arg argument;

    /**
     * Constructeur
     */
    public Operator(/*OpType type*/) {  //constructeur. Si type ==opdebase, x et y inutiles.
        this.type = new OpType(OpType.Type.VIDE);
        //this.setText(type.toString());
        this.setTransferHandler(new DnDTransferHandler());      //Handler pour le DnD

        dragSource = new DragSource();
    }

  
    // <editor-fold defaultstate="collapsed" desc="Drag and drop">
    public void dragEnter(DragSourceDragEvent evt) {
        //System.out.println("enters");
        evt.getDragSourceContext().setCursor(DragSource.DefaultCopyDrop);
    }

    public void dragOver(DragSourceDragEvent evt) {
    }

    public void dragExit(DragSourceEvent evt) {
        //System.out.println("leaves");
        evt.getDragSourceContext().setCursor(DragSource.DefaultCopyNoDrop);
    }

    public void dropActionChanged(DragSourceDragEvent evt) {
        //System.out.println("changes the drag action between copy or move");
    }

    public abstract void dragDropEnd(DragSourceDropEvent evt);

    public abstract void dragGestureRecognized(DragGestureEvent evt);
      // </editor-fold>
}
